package proxy_pattern.remote.ex1;

/**
 * @author 申书航
 * @version 1.0
 *
 * ServiceAmbassador 类实现了远程服务接口，通过网络请求实现远程功能代理。
 */
public class ServiceAmbassador implements RemoteServiceInterface{

    private static final int RETRIES = 3; // 重试次数

    private static final int DELAY_MS = 1000; // 重试间隔时间（毫秒）

    /**
     * 检查远程服务的延迟并返回结果。
     * @param val 输入参数
     * @return 远程服务的返回值
     */
    private long checkLatency(int val) {
        long start = System.currentTimeMillis();
        long res = RemoteService.getService().doRemoteFunction(val);
        long end = System.currentTimeMillis() - start;
        System.out.println("执行消耗时间：" + end + "ms");
        return res;
    }


    @Override
    /**
     * 执行远程功能，如果失败则重试指定次数。
     * @param val 输入参数
     * @return 远程服务的返回值，若全部重试失败则返回-1
     */
    public long doRemoteFunction(int val) {
        long res = -1;
        for (int i = 1; i <= RETRIES; i++) {
            res = checkLatency(val);
            if (res != -1) {
                return res;
            }
            else {
                System.out.println("重试第" + i + "次");
                try {
                    Thread.sleep(DELAY_MS);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return res;
    }
}

